package com.travelsmart.client.apresentacao.view.subview;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.travelsmart.client.apresentacao.i18n.I18nMessages;
import com.travelsmart.client.apresentacao.view.BaseView;

import com.travelsmart.client.apresentacao.widget.FormListBox;
import com.travelsmart.client.bean.to.FilterPesquisaHotel;
import com.travelsmart.client.bean.to.FilterPesquisaHotel.FilterQuarto;

public class ViewInfoQuantidadePesquisaHotel extends BaseView{
	
	private List<ViewQuartoPesquisaHotel> listQuartoPesquisaHotel = new ArrayList<ViewQuartoPesquisaHotel>();
	private final VerticalPanel vPanelViewInfoQuantidadePesquisaHotel = new VerticalPanel();
	private final Grid advancedOptions = new Grid(2, 1);
	private final FormListBox qtiQuarto = new FormListBox("qtiQuarto",I18nMessages.INSTANCE.help_quartos(),
			new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14"},
			new ChangeHandler() {
				@Override
				public void onChange(ChangeEvent event) {
					this.changeQtiQuarto();

				}

				private void changeQtiQuarto() {
					int n_qto_row = 7;
					int qti = qtiQuarto.getSelectedValueInt();
					Grid advancedOptions2 = new Grid(qti/n_qto_row + 1, qti < n_qto_row ? qti : n_qto_row);
					listQuartoPesquisaHotel = new ArrayList<ViewQuartoPesquisaHotel>();
						for (int i = 0; i < qti; i++) {
							listQuartoPesquisaHotel.add(new ViewQuartoPesquisaHotel(i));
							advancedOptions2.setWidget(i/n_qto_row, i%n_qto_row, listQuartoPesquisaHotel.get(i).gridQuartoPesquisaHotel);
						}

					advancedOptions.setWidget(1, 0, advancedOptions2);
				}
			});


	
	private final List<FilterQuarto> getListFilterQuarto() {
		List<FilterQuarto> listQ = new ArrayList<FilterQuarto>();

		for (int i = 0; i < listQuartoPesquisaHotel.size(); i++) {
			listQ.add(new FilterQuarto());
			listQ.get(i).setQtiAdulto(
					listQuartoPesquisaHotel.get(i).qtiAdulto
							.getSelectedValueInt());
			for (int index = 0; index < listQuartoPesquisaHotel.get(i).listIdadeCrianca
					.size(); index++) {
				listQ.get(i)
						.getListCrianca()
						.add(listQuartoPesquisaHotel.get(i).listIdadeCrianca
								.get(index).getSelectedValueInt());
			}
		}
		
		return listQ;
	}


	
	public ViewInfoQuantidadePesquisaHotel() {
		super(new HTML(I18nMessages.INSTANCE.quantidade()));
		initWidget(vPanelViewInfoQuantidadePesquisaHotel);
	}
	
	public void exec(){
		vPanelViewInfoQuantidadePesquisaHotel.clear();
		vPanelViewInfoQuantidadePesquisaHotel.add(quantidade());
	}
	
	private VerticalPanel quantidade(){
		Grid gridQuantidadeQuarto = new Grid(1, 2);
		gridQuantidadeQuarto.setCellSpacing(6);
		gridQuantidadeQuarto.setHTML(0, 0, I18nMessages.INSTANCE.quartos());
		gridQuantidadeQuarto.setWidget(0, 1, qtiQuarto);
		listQuartoPesquisaHotel.add(new ViewQuartoPesquisaHotel(0));
		advancedOptions.setWidget(0, 0, gridQuantidadeQuarto);
		advancedOptions.setWidget(1, 0, listQuartoPesquisaHotel.get(0).gridQuartoPesquisaHotel);
		VerticalPanel quantidade = new VerticalPanel();
		quantidade.add(this.getNome());
		quantidade.add(advancedOptions);
		return quantidade; 

	}
	
	private class ViewQuartoPesquisaHotel {
		private String[] idades = new String[] { "0", "1", "2", "3",
				"4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14",
				"15", "16", "17" };
		private FormListBox qtiAdulto = null;
		private FormListBox qtiCrianca = null;
		private List<FormListBox> listIdadeCrianca = new ArrayList<FormListBox>();
		private Grid gridQuartoPesquisaHotel = new Grid(4, 2);

		public ViewQuartoPesquisaHotel(int index_quarto) {
			final int numero_quarto = index_quarto + 1;
			qtiAdulto = new FormListBox("qtiAdulto_" + numero_quarto,I18nMessages.INSTANCE.help_adultos(numero_quarto), new String[] {
					"1", "2" });
			qtiCrianca = new FormListBox("qtiCrianca_" + numero_quarto,I18nMessages.INSTANCE.help_criancas(numero_quarto),
					new String[] { "0", "1", "2", "3", "4" },
					new ChangeHandler() {

						@Override
						public void onChange(ChangeEvent event) {
							changeQtiCrianca(numero_quarto);
						}
					});

			gridQuartoPesquisaHotel.setHTML(0, 0, I18nMessages.INSTANCE.quarto1(numero_quarto) );
			gridQuartoPesquisaHotel.setHTML(1, 0, I18nMessages.INSTANCE.adultos());
			gridQuartoPesquisaHotel.setWidget(1, 1, qtiAdulto);
			gridQuartoPesquisaHotel.setHTML(2, 0, I18nMessages.INSTANCE.criancas());
			gridQuartoPesquisaHotel.setWidget(2, 1, qtiCrianca);
		}

		private void changeQtiCrianca(int numero_quarto) {
			// INICIO - EXERC. 3
			int qti = qtiCrianca.getSelectedValueInt();
			listIdadeCrianca = new ArrayList<FormListBox>();
			if (qti > 0) {
				VerticalPanel vPanelIdadesCriancas = new VerticalPanel();
				gridQuartoPesquisaHotel.setWidget(3, 0, new HTML(I18nMessages.INSTANCE.idade_criancas()));
				
				for (int i = 0; i < qti; i++) {
					listIdadeCrianca.add(new FormListBox("listIdadeCrianca_" + numero_quarto + "_" + i, 
							I18nMessages.INSTANCE.help_idade_crianca(i + 1, numero_quarto), idades));
					vPanelIdadesCriancas.add(listIdadeCrianca.get(i));
				}
				
				gridQuartoPesquisaHotel.setWidget(3, 1, vPanelIdadesCriancas);
			} else {
				gridQuartoPesquisaHotel.setWidget(3, 0, new HTML(""));
				gridQuartoPesquisaHotel.setWidget(3, 1, new HTML(""));
			}
			// FIM - EXERC. 3
		}
		

	}
	//# INICIO - EXERC. 3	
	public void carregarFilterPesquisaHotel(FilterPesquisaHotel filter) {
		filter.setListQuarto(getListFilterQuarto());
	}
	//FIM - EXERC. 3 #*/



	public VerticalPanel getvPanelViewInfoQuantidadePesquisaHotel() {
		return vPanelViewInfoQuantidadePesquisaHotel;
	}
	
}

